]> git.r.bdr.sh - rbdr/super-polarity/blobdiff - Super Polarity/ActorManager.cs
Protoshow sprint.
[rbdr/super-polarity] / Super Polarity / ActorManager.cs
index 8cd265a432a06d10867bd6fdd3e86836a638eb94..f5587b9c9f772872a3915720451706b6fe3efcd8 100644 (file)
@@ -27,7 +27,9 @@ namespace SuperPolarity
 
         static public void CheckOut(Actor actor)
         {
+            actor.CleanUp();
             Actors.Remove(actor);
+            actor = null;
         }
 
         static public void Update(GameTime gameTime) 
@@ -55,6 +57,12 @@ namespace SuperPolarity
                 if (i >= Actors.Count) {
                     i = Actors.Count - 1;
                 }
+
+                if (Actors.Count == 0)
+                {
+                    return;
+                }
+
                 Actor actor = Actors[i];
                 for (var j = i - 1; j >= 0; j--)
                 {
@@ -110,13 +118,43 @@ namespace SuperPolarity
                     actor.Position.Y > Game.GraphicsDevice.Viewport.Height + OutlierBounds)
                 {
                     CheckOut(actor);
+                    if (actor.Parent != null)
+                    {
+                        actor.Parent.Children.Remove(actor);
+                    }
                 }
             }
         }
 
+        static public void Empty()
+        {
+            foreach (Actor actor in Actors) {
+                actor.CleanUp();
+            }
+            Actors.Clear();
+        }
+
         internal static void SetGame(SuperPolarity game)
         {
             Game = game;
         }
+
+        public static void Bomb()
+        {
+            for (var i = Actors.Count - 1; i >= 0; i--)
+            {
+                var actor = Actors[i];
+                if (actor.GetType() == typeof(StandardShip))
+                {
+                    CheckOut(actor);
+                    Renderer.CheckOut(actor);
+                }
+            }
+        }
+
+        public static int CountBaddies()
+        {
+            return Actors.Where(a => a.GetType() == typeof(StandardShip)).Count();
+        }
     }
 }